package models

import "time"

// 这套设计支持完整的RBAC功能，包括用户管理、角色管理、权限管理(菜单/按钮/API)，并支持权限与API资源的关联控制

type User struct {
	Id          int64     `xorm:"pk autoincr bigint(20) 'id'" json:"id"`                 // 用户Id
	Username    string    `xorm:"varchar(64) notnull unique 'username'" json:"username"` // 用户名
	Password    string    `xorm:"varchar(128) notnull 'password'" json:"-"`              // 密码(加密存储)
	Salt        string    `xorm:"varchar(32) 'salt'" json:"-"`                           // 密码盐
	Status      int       `xorm:"tinyint(1) default 1 'status'" json:"status"`           // 状态(0:禁用 1:启用 2:锁定)
	Avatar      string    `xorm:"varchar(255) 'avatar'" json:"avatar"`                   // 头像
	LastLoginAt time.Time `xorm:"datetime 'last_login_at'" json:"last_login_at"`         // 最后登录时间
	CreatedAt   time.Time `xorm:"created datetime 'created_at'" json:"created_at"`       // 创建时间
	UpdatedAt   time.Time `xorm:"updated datetime 'updated_at'" json:"updated_at"`       // 更新时间
	DeletedAt   time.Time `xorm:"deleted datetime 'deleted_at'" json:"-"`                // 删除时间(软删除)
}

func (u *User) TableName() string {
	return "sys_user"
}

type UserExtend struct {
	Id     int64
	UserId int64  `xorm:"user_id unique"`
	Mobile string `xorm:"varchar(20) 'mobile'" json:"mobile"` // 手机号
	Email  string `xorm:"varchar(128) 'email'" json:"email"`  // 邮箱
}

func (ue *UserExtend) TableName() string {
	return "sys_user_extend"
}

type Role struct {
	Id          int64     `xorm:"pk autoincr bigint(20) 'id'" json:"id"`           // 角色Id
	Name        string    `xorm:"varchar(64) notnull unique 'name'" json:"name"`   // 角色名称
	Code        string    `xorm:"varchar(64) notnull unique 'code'" json:"code"`   // 角色编码
	Description string    `xorm:"varchar(255) 'description'" json:"description"`   // 角色描述
	Status      int       `xorm:"tinyint(1) default 1 'status'" json:"status"`     // 状态(1:启用 0:禁用)
	CreatedAt   time.Time `xorm:"created datetime 'created_at'" json:"created_at"` // 创建时间
	UpdatedAt   time.Time `xorm:"updated datetime 'updated_at'" json:"updated_at"` // 更新时间
	DeletedAt   time.Time `xorm:"deleted datetime 'deleted_at'" json:"-"`          // 删除时间(软删除)
}

func (r *Role) TableName() string {
	return "sys_role"
}

type UserRole struct {
	Id        int64     `xorm:"pk autoincr bigint(20) 'id'" json:"id"`           // 主键Id
	UserId    int64     `xorm:"bigint(20) notnull 'user_id'" json:"user_id"`     // 用户Id
	RoleId    int64     `xorm:"bigint(20) notnull 'role_id'" json:"role_id"`     // 角色Id
	CreatedAt time.Time `xorm:"created datetime 'created_at'" json:"created_at"` // 创建时间
}

func (ur *UserRole) TableName() string {
	return "sys_user_role"
}

type Permission struct {
	Id        int64     `xorm:"pk autoincr bigint(20) 'id'" json:"id"`           // 权限Id
	Name      string    `xorm:"varchar(64) notnull 'name'" json:"name"`          // 权限名称
	Code      string    `xorm:"varchar(64) notnull unique 'code'" json:"code"`   // 权限编码
	Type      int       `xorm:"tinyint(1) notnull 'type'" json:"type"`           // 权限类型(1:菜单 2:按钮 3:API)
	ParentId  int64     `xorm:"bigint(20) 'parent_id'" json:"parentId"`          // 父权限Id
	Path      string    `xorm:"varchar(255) 'path'" json:"path"`                 // 路由路径
	Component string    `xorm:"varchar(255) 'component'" json:"component"`       // 组件路径
	Icon      string    `xorm:"varchar(64) 'icon'" json:"icon"`                  // 图标
	Sort      int       `xorm:"int(11) default 0 'sort'" json:"sort"`            // 排序
	Status    int       `xorm:"tinyint(1) default 1 'status'" json:"status"`     // 状态(1:启用 0:禁用)
	CreatedAt time.Time `xorm:"created datetime 'created_at'" json:"created_at"` // 创建时间
	UpdatedAt time.Time `xorm:"updated datetime 'updated_at'" json:"updated_at"` // 更新时间
	DeletedAt time.Time `xorm:"deleted datetime 'deleted_at'" json:"-"`          // 删除时间(软删除)
}

func (p *Permission) TableName() string {
	return "sys_permission"
}

type RolePermission struct {
	Id           int64     `xorm:"pk autoincr bigint(20) 'id'" json:"id"`                   // 主键Id
	RoleId       int64     `xorm:"bigint(20) notnull 'role_id'" json:"role_id"`             // 角色Id
	PermissionId int64     `xorm:"bigint(20) notnull 'permission_id'" json:"permission_id"` // 权限Id
	CreatedAt    time.Time `xorm:"created datetime 'created_at'" json:"created_at"`         // 创建时间
}

func (rp *RolePermission) TableName() string {
	return "sys_role_permission"
}

type ApiResource struct {
	Id          int64     `xorm:"pk autoincr bigint(20) 'id'" json:"id"`           // 主键Id
	Name        string    `xorm:"varchar(64) notnull 'name'" json:"name"`          // API名称
	Path        string    `xorm:"varchar(255) notnull 'path'" json:"path"`         // API路径
	Method      string    `xorm:"varchar(16) notnull 'method'" json:"method"`      // 请求方法(GET,POST等)
	Description string    `xorm:"varchar(255) 'description'" json:"description"`   // API描述
	Status      int       `xorm:"tinyint(1) default 1 'status'" json:"status"`     // 状态(1:启用 0:禁用)
	CreatedAt   time.Time `xorm:"created datetime 'created_at'" json:"created_at"` // 创建时间
	UpdatedAt   time.Time `xorm:"updated datetime 'updated_at'" json:"updated_at"` // 更新时间
	DeletedAt   time.Time `xorm:"deleted datetime 'deleted_at'" json:"-"`          // 删除时间(软删除)
}

func (ar *ApiResource) TableName() string {
	return "sys_api_resource"
}

type PermissionApi struct {
	Id           int64     `xorm:"pk autoincr bigint(20) 'id'" json:"id"`                   // 主键Id
	PermissionId int64     `xorm:"bigint(20) notnull 'permission_id'" json:"permission_id"` // 权限Id
	ApiId        int64     `xorm:"bigint(20) notnull 'api_id'" json:"api_id"`               // API Id
	CreatedAt    time.Time `xorm:"created datetime 'created_at'" json:"created_at"`         // 创建时间
}

func (pa *PermissionApi) TableName() string {
	return "sys_permission_api"
}
